package 数据结构和算法.剑指offer.树.二叉树的镜像;

import 工具.动态生成二叉树.DynamicTreeUtil;
import 工具.打印.PrintUtil;
import 数据结构和算法.数据结构.普通二叉树.TreeNode;

import static 工具.动态生成二叉树.DynamicTreeUtil.createTree;

/**
 * 二叉树的镜像
 * <p>
 * 请完成一个函数，输入一个二叉树，该函数输出它的镜像
 * <p>
 * 树的问题直接递归，使用先序遍历，然后递归交换左右子树。
 */
public class Test {
    public static void main(String[] args) {
        int[] array = {10, 9, 20, 15, 35};

        // 创建树
        DynamicTreeUtil.TreeRoot treeRoot = new DynamicTreeUtil.TreeRoot();
        for (int i = 0; i < array.length; ++i) {
            createTree(treeRoot, array[i]);
        }

        TreeNode treeNode = mirrorTree(treeRoot.getRootNode());
        PrintUtil.println(treeNode.getLeftTreeNode().getValue());
    }

    public static TreeNode mirrorTree(TreeNode treeNode) {
        if (treeNode == null) {
            return null;
        }

        TreeNode temp = treeNode.getLeftTreeNode();
        treeNode.setLeftTreeNode(treeNode.getRightTreeNode());
        treeNode.setRightTreeNode(temp);

        mirrorTree(treeNode.getLeftTreeNode());
        mirrorTree(treeNode.getRightTreeNode());
        return treeNode;
    }
}
